package com.wangsd.member.service;

import com.gitee.fastmybatis.core.query.Query;
import com.gitee.fastmybatis.core.query.Sort;
import com.wangsd.member.entity.MemberCoupon;
import com.wangsd.member.mapper.MemberCouponMapper;
import com.wangsd.system.entity.Coupon;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * 用户优惠券Service业务层处理
 *
 * @author wsd
 * @date 2021-06-18
 */
@Service
public class MemberCouponService {
    @Autowired
    private MemberCouponMapper memberCouponMapper;

    /**
     * 查询用户优惠券
     *
     * @param id 用户优惠券ID
     * @return 用户优惠券
     */
    public MemberCoupon selectMemberCouponById(Long id) {
        return memberCouponMapper.getById(id);
    }

    /**
     * 查询用户优惠券列表
     *
     * @param memberCoupon 用户优惠券
     * @return 用户优惠券
     */
    public List<Coupon> selectMemberCouponList(MemberCoupon memberCoupon) {
        Query query = new Query();
        if (memberCoupon.getMemberId() != null) {
            query.eq("t.member_id",memberCoupon.getMemberId());
        }
        if (memberCoupon.getMerchantId() != null) {
            query.eq("t.merchant_id",memberCoupon.getMerchantId());
        }

        if (memberCoupon.getStatus() != null) {
            query.eq("t.status",memberCoupon.getStatus());
        }
        query.gt("expire_time",new Date());
        query.join("join coupon t2 on t.coupon_id = t2.id");
        query.orderby("t.created_time", Sort.DESC);
        List<String> list = Arrays.asList("t.created_time,t.expire_time,t.id as memberCouponId,t2.*");
        List<Coupon> coupons = memberCouponMapper.listBySpecifiedColumns(list, query, Coupon.class);
        return coupons;
    }

    /**
     * 新增用户优惠券
     *
     * @param memberCoupon 用户优惠券
     * @return 结果
     */
    public int insertMemberCoupon(MemberCoupon memberCoupon) {
        return memberCouponMapper.saveIgnoreNull(memberCoupon);
    }

    /**
     * 修改用户优惠券
     *
     * @param memberCoupon 用户优惠券
     * @return 结果
     */
    public int updateMemberCoupon(MemberCoupon memberCoupon) {
        return memberCouponMapper.updateIgnoreNull(memberCoupon);
    }

    /**
     * 删除用户优惠券信息
     *
     * @param id 用户优惠券ID
     * @return 结果
     */
    public int deleteMemberCouponById(Long id) {
        return memberCouponMapper.deleteById(id);
    }

    /**
     * 查询用户拥有优惠券
     *
     * @param memberId 用户id
     * @param type     券类型
     * @return 结果
     */
    public List<Coupon> selectUserCouponList(Long memberId, Integer type) {
        Query query = new Query();
        query.eq("t.member_id", memberId);
        query.eq("t2.type", type);
        query.join("coupon t2 on t.coupon_id=t2.id");
        List<String> list = Arrays.asList("t2.*");
        List<Coupon> coupons = memberCouponMapper.listBySpecifiedColumns(list, query, Coupon.class);
        return coupons;
    }
}
